home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / preempt.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  1KB  |  64 lines

  1. #ifndef __LINUX_PREEMPT_H
  2. #define __LINUX_PREEMPT_H
  3.  
  4. /*
  5.  * include/linux/preempt.h - macros for accessing and manipulating
  6.  * preempt_count (used for kernel preemption, interrupt count, etc.)
  7.  */
  8.  
  9. #include <linux/config.h>
  10. #include <linux/linkage.h>
  11. #include <asm/system.h> /* barrier() <--> mb() */
  12.  
  13. #ifdef CONFIG_DEBUG_PREEMPT
  14.   extern void fastcall add_preempt_count(int val);
  15.   extern void fastcall sub_preempt_count(int val);
  16. #else
  17. # define add_preempt_count(val)    do { preempt_count() += (val); } while (0)
  18. # define sub_preempt_count(val)    do { preempt_count() -= (val); } while (0)
  19. #endif
  20.  
  21. #define inc_preempt_count() add_preempt_count(1)
  22. #define dec_preempt_count() sub_preempt_count(1)
  23.  
  24. #define preempt_count()    (current_thread_info()->preempt_count)
  25.  
  26. #ifdef CONFIG_PREEMPT
  27.  
  28. asmlinkage void preempt_schedule(void);
  29.  
  30. #define preempt_disable() \
  31. do { \
  32.     inc_preempt_count(); \
  33.     barrier(); \
  34. } while (0)
  35.  
  36. #define preempt_enable_no_resched() \
  37. do { \
  38.     barrier(); \
  39.     dec_preempt_count(); \
  40. } while (0)
  41.  
  42. #define preempt_check_resched() \
  43. do { \
  44.     if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
  45.         preempt_schedule(); \
  46. } while (0)
  47.  
  48. #define preempt_enable() \
  49. do { \
  50.     preempt_enable_no_resched(); \
  51.     preempt_check_resched(); \
  52. } while (0)
  53.  
  54. #else
  55.  
  56. #define preempt_disable()        do { } while (0)
  57. #define preempt_enable_no_resched()    do { } while (0)
  58. #define preempt_enable()        do { } while (0)
  59. #define preempt_check_resched()        do { } while (0)
  60.  
  61. #endif
  62.  
  63. #endif /* __LINUX_PREEMPT_H */
  64.